package org.jypj.dev.dao;

import org.apache.ibatis.annotations.Param;
import org.jypj.dev.model.Work;
import org.jypj.dev.util.Page;

import java.util.List;
import java.util.Map;

public interface IWorkDao {

    /**
     * 保存
     * 字段为空的不存防止覆盖存在默认值的字段
     *
     * @param work
     * @return 保存后的对象包括ID
     */
    public int saveWorkByField(Work work);

    /**
     * 保存
     * 所有字段全都保存
     *
     * @param work
     * @return 保存后的对象包括ID
     */
    public int saveWork(Work work);

    /**
     * 根据ID删除
     *
     * @param id 主键ID
     * @return 删除记录数
     */
    public int deleteWorkById(String id);

    /**
     * 根据对象删除
     *
     * @param work
     * @return
     */
    public int deleteWorkByObject(Work work);

    /**
     * 更新
     * 只更新值不为空的字段
     *
     * @param work
     * @return 保存后的对象包括ID
     */
    public int updateWorkByField(Work work);

    /**
     * 更新工序的排序
     *
     * @param id
     * @param sortOrder
     * @return
     */
    public int updateWorkSortOrder(@Param("id") String id, @Param("sortOrder")String sortOrder);

    /**
     * 更新
     * 更新所有字段
     *
     * @param work
     * @return 保存后的对象包括ID
     */
    public int updateWork(Work work);

    /**
     * 按ID查询
     *
     * @return Work
     * @parm id 主键ID
     */
    public Work selectWorkById(String id);

    /**
     * 按ID查询
     *
     * @return Work
     * @parm id 主键ID
     */
    public Work selectWorkByIdAndTrain(Map<String, Object> map);

    /**
     * 查询子类节点中最大的ID值
     *
     * @param parentNum
     * @return
     */
    public String selectMaxChildId(String parentId);

    /**
     * 分页查询 包含条件
     *
     * @param page 分页对象
     * @param map  查询条件
     * @return List<Work>
     */
    public List<Work> selectOnePageByMap(Page page, Map<String, Object> map);

    /**
     * 分页查询 包含对象条件
     *
     * @param page 分页对象
     * @param work 查询对象
     * @return List<Work>
     */
    public List<Work> selectOnePageByWork(Page page, Work work);

    /**
     * 按条件查询全部的
     *
     * @param map 查询条件
     * @return List<Work>
     */
    public List<Work> selectAllByMap(Map<String, Object> map);

    /**
     * 按条件查询全部的
     *
     * @param map 查询条件
     * @return List<Work>
     */
    public List<Work> selectAllByWork(Work work);

    /**
     * 按条件查询单个对象
     *
     * @param map 查询条件
     * @return Work
     */
    public Work selectObjectByMap(Map<String, Object> map);

    /**
     * 按条件查询单个对象
     *
     * @param map 查询条件
     * @return Work
     */
    public Work selectObjectByWork(Work work);
}
